package com.huanzhidadi.single.stringintern;

public class StringIntern {
    public static void main(String args[]) {
        String s1 = new StringBuilder().append("String").append("Test").toString();
        System.out.println(s1.intern() == s1);
        System.out.println(s1.intern().hashCode());
        System.out.println(s1.hashCode());
        System.out.println(s1.intern().equals(s1));

        // 常量池中一开始就已经存在 "java" 字符串，所以 s2.intern() 返回常量池中 "java" 字符串的引用， s2指向新建的字符串对象。
        String s2 = new StringBuilder().append("ja").append("va").toString();
        System.out.println(s2.intern() == s2);
        System.out.println(s2.intern().hashCode());
        System.out.println(s2.hashCode());
        System.out.println(s2.intern().equals(s2));

        // 因为s1在调用intern()时，已经将StringTest放入常量池，所以s3.intern()获取到的是常量池中的字符串的引用，s3是新建的字符串对象
        String s3 = new StringBuilder().append("String").append("Test").toString();
        System.out.println(s3.intern() == s3);
        System.out.println(s3.intern().hashCode());
        System.out.println(s3.hashCode());
        System.out.println(s3.intern().equals(s3));
        /**
         * true
         * 420381795
         * 420381795
         * true
         * false
         * 3254818
         * 3254818
         * true
         * false
         * 420381795
         * 420381795
         * true
         */
    }
}
